import { Vec3 } from 'cc';
import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;

export default class Design {
    
    // 移动到其他的父节点，同时保持在屏幕上的位置不变
    public static changeParenWithoutMove(node: Node, newParent: Node) {
        // 获取目标节点的世界坐标
        const worldPosition = new Vec3();
        node.getWorldPosition(worldPosition);

        // 将目标节点设置为新的父节点的子节点
        node.setParent(newParent);

        // 将世界坐标转换为新的父节点的局部坐标
        const localPosition = new Vec3();
        if (newParent != null)
            newParent.inverseTransformPoint(localPosition, worldPosition);

        // 设置目标节点的局部坐标
        node.setPosition(localPosition);
    }

    // 获取一个节点相对于另一个节点的位置
    public static getRelativePosition(source: Node, target: Node): Vec3 {
        // 获取 source 节点的世界坐标
        const worldPosition = new Vec3();
        source.getWorldPosition(worldPosition);

        // 将世界坐标转换为 target 节点的局部坐标
        const localPosition = new Vec3();
        target.inverseTransformPoint(localPosition, worldPosition);

        return localPosition;
    }
}
